#ifndef __CENEMYMANAGER_H__
#define __CENEMYMANAGER_H__

#include "GeneralInclude.h"
#include "Board.h"

typedef struct EnemyZone
{
	quad2du32 Zone;
    s32 NextX;
    s32 NextY;
} EnemyZone;

typedef IListContainer<CEnemy> EnemiesList;
typedef IVectorContainer<I2DNode> EnemiesGraphVector;

class CEnemyManager
{
private:
    EnemiesGraphVector EnemiesGraph;
    EnemiesList Enemies;

    ITimer *EnemyTimer;
    u32 EnemySpeed;
    u32 ActualEnemyStartZone;
    u32 ActualEnemyIndex;

    IVectorContainer<EnemyZone> EnemyStartZones;
public:
    CEnemyManager();
    virtual ~CEnemyManager();

    void Load(stringc Level);
	void Destroy();
    EnemiesGraphVector &GetEnemiesGraphVector()   {   return EnemiesGraph;    }

    void Start(u32 es);
    inline void SetEnemySpeed(u32 nes)	{	EnemySpeed = nes;	}
    inline u32 GetEnemySpeed()			{	return EnemySpeed;	}
    void IncEnemySpeed(s32 ies);
    bool Update(CBoard *board);
    bool AddNewEnemy(CBoard *board);
    vector2du32 GetPosNewPosForEnemy();
    void SetEnemyGraph(CEnemy *enemy,u32 Index);
    u32 GetIndexEnemy();
    void UpdateIndexEnemy();
    void UpdateIndexActualZone();
    bool UpdateEnemyZone(EnemyZone *enemyzone,CBoard *board,vector2du32 Pos);
    bool MoveNextEnemy(CEnemy *enemy,EnemyZone *enemyzone,CBoard *board);
    bool DestroyEnemiesForFicha(CFicha *ficha,CBoard *board,vector2du32 *PosLast);
};

#endif
